class Solution {
public:
    vector<int> findErrorNums(vector<int>& nums) {
        int *hash_t = new int[nums.size() + 1];
        memset(hash_t, 0, (nums.size() + 1) * sizeof(int));
        vector<int> ans;
        //cout << sizeof(hash_t) << endl;
        //for(int i = 0; i < sizeof(hash_t) / sizeof(int); i++)cout << hash_t[i] << endl;
        for(int i = 0; i < nums.size(); i++){
            if(!hash_t[nums[i]]){
                hash_t[nums[i]] = 1;
            }
            else ans.push_back(nums[i]);
        }
        for(int i = 1; i <= nums.size(); i++){
            if(!hash_t[i])ans.push_back(i);
        }
        delete [] hash_t;
        return ans;
    }
};

//sizeof 是编译时起作用的，所以对于动态数组名（也就是指针）而言，sizeof得到的是指针的字节数（manjaro linux是 8);
//所以这里使用 memset 的话就要自己算数组的大小。